﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;

namespace Zero.UControl.Component
{
    public class FestivalProvider
    {
        private static List<string> holidays;
        private static List<string> workdays;

        static FestivalProvider()
        {
            // 通用节假日（不依赖年份）
            holidays = new List<string>()
            {
                // 元旦
                "1-1",

                // 春节（按农历通常在1月下旬~2月中旬，这里取常见时间范围）
                "1-21", "1-22", "1-23", "1-24", "1-25", "1-26", "1-27", // 约春节七天假（仅供标记）

                // 清明节
                "4-4", "4-5", "4-6",

                // 劳动节
                "5-1", "5-2", "5-3", "5-4", "5-5",

                // 端午节（一般6月中上旬）
                "6-8", "6-9", "6-10",

                // 中秋节（一般9月中下旬）
                "9-15", "9-16", "9-17",

                // 国庆节 + 中秋可能重叠
                "10-1", "10-2", "10-3", "10-4", "10-5", "10-6", "10-7",
            };

            // 常见调休上班日（不固定，但很多年份规律相似）
            workdays = new List<string>()
            {
                // 春节前后常调休
                "1-19", "2-8",

                // 清明节或劳动节前后调休
                "4-27", "5-11",

                // 国庆节前后调休
                "9-28", "10-11"
            };
        }

        public static string GetFestival(int month, int day)
        {
            return month switch
            {
                1 when day == 1 => "元旦",
                2 when day == 14 => "情人节",
                3 when day == 8 => "妇女节",
                4 when day == 5 => "清明节",
                5 when day == 1 => "劳动节",
                6 when day == 1 => "儿童节",
                7 when day == 1 => "建党节",
                8 when day == 1 => "建军节",
                9 when day == 10 => "教师节",
                10 when day == 1 => "国庆节",
                12 when day == 25 => "圣诞节",
                _ => string.Empty,
            };
        }

        public static string GetDayTag(DateTime date)
        {
            string dateStr = $"{date.Month}-{date.Day}";
            if(holidays.Contains(dateStr)) return "休";
            if(workdays.Contains(dateStr)) return "班";
            return string.Empty;
        }


        public static Brush GetDayTagColor(DateTime date)
        {
            var tag = GetDayTag(date);
            return tag == "休" ? Brushes.Red : tag == "班" ? Brushes.Gray : Brushes.Transparent;
        }
    }
}
